Copies of production data of an organization are often maintained for backup and recovery purposes. One or more complete copies of the production data, also referred to herein as primary data, may be maintained, thereby requiring the amount of storage space occupied by the primary data to be multiplied by the number of copies of the data. These full copies of the data, referred to as “full-data snapshots,” are usually created for off-host processing. For example, when a company installs a new accounting system, there typically is a period of time during which the old and new accounting systems are run in parallel. This testing period allows the new system to be tested with a copy of live data without risking corruption of the live production data. However, allocation of storage space for a complete copy of the data, such as are available in a full-data snapshot, may limit the number of full-data snapshots that can be maintained by an organization.
Another type of copy of primary data is a space-saving snapshot. In a space-saving snapshot, changes to the primary data are tracked and respective regions are marked as having been changed. For example, a change to data for a given region may be marked in a bitmap, where each bit represents a region of primary data. When a change to the primary data is about to be made via a write operation, a copy of the primary data before the change is captured in a copy-on-write operation. These space-saving snapshots consume much less storage space, as space is necessary only to track copies of regions for which the primary data have changed.
However, to obtain a complete copy of the primary data as captured in a space-saving snapshot, data must be read from two locations, the parent copy of the data and the space-saving snapshot. Reading from multiple locations is much less efficient than reading from a complete copy of the data. Furthermore, “off-host processing” (processing performed by a computer that is not the host of the applications maintaining the primary data) typically cannot operate on data stored in a space-saving snapshot. Space-saving snapshots are useful in maintaining many point-in-time copies of primary data without consuming unnecessary storage space to store duplicate copies of data that are not changing.
What is needed is a way to quickly convert from a copy of data in a full-data snapshot to a space-saving snapshot, or vice versa, while retaining all of the contents of the snapshot.